<?php

if (!function_exists('build_ranstr')) {
    /**
     * 获得随机字符串
     * @param   Number  $len    需要的长度
     * @param   Bool    $special    是否需要特殊符号
     * @return  String  返回随机字符串
     */
    function build_ranstr($len = 8, $special = false)
    {
        $chars = array(
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
            "3", "4", "5", "6", "7", "8", "9"
        );

        if ($special) {
            $chars = array_merge($chars, array(
                "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
                "}", "<", ">", "~", "+", "=", ",", "."
            ));
        }

        $charsLen = count($chars) - 1;
        // 打乱数组
        shuffle($chars);                            //打乱数组顺序
        $str = '';
        for ($i = 0; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
        }
        return $str;
    }
}

/**
 * 跳转提示函数
 * 
 * @param String $msg  提示信息
 * 
 * @param String $url  跳转地址
 * 
 * @return String 结果
 */
function ShowMsg($msg = '未知信息', $url = null)
{
    $str = '';

    if ($url) {
        $str = "
            <script>
                alert('$msg');
                location.href = '$url';
            </script>
        ";
    } else {
        $str = "
            <script>
                alert('$msg');
                history.go(-1);
            </script>
        ";
    }

    echo $str;
    exit;
}
/**
 * 上传单图片函数
 * 
 * @param   String  $name    图片名称
 * 
 * @param   String  $path    图片存放的路径
 * 
 * @param   Array   $type     图片格式
 * 
 * @param   Int     $size    图片大小
 */
function upload($name, $path = 'assets/upload', $type = ['jpg', 'jpeg', 'png', 'gif'], $size = 1048576)
{
    if (!is_dir($path)) {
        @mkdir($path, 0775);
    }
    // 定义一个返回数据的数组
    $result = [
        'code' => 0,
        'msg'  => '未知信息',
        'data' => null
    ];

    // 获取上传信息的错误码
    $error = $_FILES[$name]['error'];

    // 根据错误码返回相应的提示信息
    switch ($error) {
        case 1:
            $result['msg'] = '上传大小不能超过upload_max_filesize设置的值';
            break;

        case 2:
            $result['msg'] = '上传大小不能超过MAX_FILE_SIZE设置的值';
            break;

        case 3:
            $result['msg'] = '图片上传不完整';
            break;

        case 4:
            $result['msg'] = '没有上传图片';
            break;
    }
    // 获取当前文件的格式
    $FileType = pathinfo($_FILES[$name]['name'], PATHINFO_EXTENSION);
    if (!in_array($FileType, $type)) {
        $result['msg'] = '图片格式错误，请重新上传';
    }
    // 获取文件大小
    $FileSize = $_FILES[$name]['size'];
    if ($FileSize > $size) {
        $result['msg'] = '上传图片过大，请压缩后再上传';
    }
    // 设置上传后的文件名称
    $FileName = date('Ymdhis', time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $FileType;
    // 是否通过http post上传
    if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
        $res = move_uploaded_file($_FILES[$name]['tmp_name'], $path . '/' . $FileName);
        if ($res) {
            $result = [
                'code' => 1,
                'msg' => '图片上传成功',
                'data' => $path . '/' . $FileName,
            ];
        } else {
            $result['mse'] = '图片上传失败';
        }
    } else {
        $result['mse'] = '图片上传失败';
    }
    return $result;
}
/**
 * 
 * 数据库插入数据函数
 * 
 * @param String $table 表名
 * @param Array $data 要插入的数据
 * @return Int 新增的自增id
 * 
 */
function insert($table, $data)
{
    // 声明全局变量
    global $conn;
    global $pre;

    //获取数组的key值
    $field = array_keys($data);
    //获取数组的values值
    $value = array_values($data);
    // 数组转为字符串并且以 , 隔开
    $Field = implode('`,`', $field);
    $Value = implode("','", $value);
    // 组装sql语句
    $sql = "INSERT INTO `$pre{$table}`(`$Field`)values('$Value')";
    // 执行sql语句
    $res = mysqli_query($conn, $sql);
    // 需要返回的结果结果
    $result = [
        'code' => 0,
        'msg' => '未知信息',
        'data' => null,
    ];
    if ($res) {
        $result['code'] = 1;
        $result['msg'] = '新增成功';
        $result['data'] = mysqli_insert_id($conn);
    } else {
        $msg = '';
        $msg .= '执行sql语句失败：' . $sql;
        $msg .= '<br />';
        $msg .= '错误信息：' . mysqli_errno($conn);
        $result['msg'] = $msg;
    }
    return $result;
}
/**
 * 
 * 查询单条数据
 * 
 * @param String $sql 查询单条sql语句
 * 
 * @return Array 返回结果集
 */
function find($sql)
{
    // 声明全局变量
    global $conn;
    // 执行sql语句
    $res = mysqli_query($conn, $sql);
    if (!$res) {
        echo '执行sql语句失败：' . $sql;
        echo '<br>';
        echo mysqli_error($conn);
        exit;
    }
    // 返回数据的数组
    $data = [];
    // 判断是否存在数据
    if ($res && mysqli_num_rows($res) > 0) {
        $data = mysqli_fetch_assoc($res);
    }
    return $data;
}
/**
 * 
 * 查询全部数据函数
 * 
 * @param String $sql sql语句
 * 
 * @return Array 返回多维数组
 */
function all($sql)
{
    // 声明全局变量
    global $conn;
    // 执行sql语句
    $res = mysqli_query($conn, $sql);
    if (!$res) {
        echo '执行sql语句失败';
        echo '<br>';
        echo mysqli_error($conn);
        exit;
    }
    $data = [];
    if ($res && mysqli_num_rows($res) > 0) {
        $data = mysqli_fetch_all($res, MYSQLI_ASSOC);
    }
    return $data;
}
/**
 * 数据库更新函数
 * @param String $table 表名
 * @param Array $data 需要更新数据
 * @param String $where 更新条件
 * @return Int 返回结果
 */
function update($table, $data, $where)
{
    // 声明全局变量
    global $conn;
    global $pre;

    $str = '';
    foreach ($data as $key => $item) {
        // 组装sql需要更新的字段
        $str .= "`$key`='$item',";
    }
    // 删除语句中最后的 ,  
    $fields = trim($str, ',');
    // 组装sql语句
    $sql = "update `$pre{$table}` set $fields where $where";
    // 执行语句
    $res = mysqli_query($conn, $sql);

    $result = [
        'code' => 0,
        'msg' => '未知信息',
        'data' => null,
    ];

    if ($res) {
        $result['code'] = 1;
        $result['msg'] = '更新成功';
        $result['data'] = mysqli_affected_rows($conn);
    } else {
        $msg = '';
        $msg .= '执行sql语句失败：' . $sql;
        $msg .= '<br />';
        $msg .= '错误信息：' . mysqli_error($conn);
        $result['msg'] = $msg;
    }

    return $result;
}
/** 
 * @param String $table 表名
 * @param String $where 条件
 * @return Int 影响行数
*/
function delete($table, $where){
    //声明全局变量
    global $conn;
    global $pre;
    // 组装sql语句
    $sql="delete from `$pre{$table}` where $where";
    // 执行语句
    $res= mysqli_query($conn, $sql);

    $result=[
        'code'=>0,
        'msg'=>'未知信息',
        'data'=>null,
    ];
    
    if($res){
        $result['code']=1;
        $result['msg']='删除成功';
        $result['data']=mysqli_affected_rows($conn);
    }else{
        $msg = '';
        $msg .= '执行sql语句失败：' . $sql;
        $msg .= '<br />';
        $msg .= '错误信息：' . mysqli_error($conn);

        $result['msg'] = $msg;
    }
    return $result;
}
